package mx.ipn.escom.redes.gestionarempleado.controller;

import java.util.List;

import mx.ipn.escom.redes.equipo.model.Departamento;
import mx.ipn.escom.redes.equipo.model.Empleado;
import mx.ipn.escom.redes.equipo.model.Perfil;
import mx.ipn.escom.redes.gestionardepartamento.business.DepartamentoBs;
import mx.ipn.escom.redes.gestionarempleado.business.EmpleadoBs;

import org.apache.struts2.convention.annotation.Namespace;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

@Namespace("/empleado") 
@SuppressWarnings("serial")
public class GestionarEmpleadoCtrl extends ActionSupport implements ModelDriven<Empleado>{
	
	private Integer idSel;
	
	private EmpleadoBs empleadoBs;
	
	private List<Empleado> listaEmpleados;
	
	private Empleado model;
	
	private String nombre;
	
	private List<Perfil> listPerfil;
	
	private List<Empleado> listSupervisor;
	
	private List<Departamento> listDepartamento;
	
	private DepartamentoBs departamentoBs;
	
	/**
	 * M�todo que muestra la pantalla principal para gestionar un Usuario
	 * @return {@link StrictMath}
	 */
	public String index() {
		listaEmpleados = empleadoBs.findAll();
		if(listaEmpleados.isEmpty() || listaEmpleados == null){
			addActionMessage(getText("SIN_REGISTRO_EMPLEADOS"));
		}
		return "index";
	}
	
	/**
	 * @return String
	 */
	public String editNew() {
		listPerfil = empleadoBs.findAllPerfil();
		listSupervisor = empleadoBs.findAll();
		listDepartamento = departamentoBs.findAll();
		if (listPerfil.size() == 0) {
			addActionError(getText("SIN_PERFILES"));
		}
		if(listSupervisor.size() == 0){
			addActionError(getText("SIN_REGISTRO_EMPLEADOS"));
		}
		if(listDepartamento.size() == 0){
			addActionError(getText("SIN_REGISTRO_DEPARTAMENTOS"));
		}
		return "editNew";
	}
	
	/**
	 * M�todo en el que se crea un Usuario
	 * @return {@link String}
	 */
	public String create() {
		empleadoBs.guardar(model);
		addActionMessage(getText("REGISTRO_EMPLEADO"));
		return index();
	}
	
	public String edit(){
		listPerfil = empleadoBs.findAllPerfil();
		listSupervisor = empleadoBs.findAll();
		listDepartamento = departamentoBs.findAll();
		if (listPerfil.size() == 0) {
			addActionError(getText("SIN_PERFILES"));
		}
		if(listSupervisor.size() == 0){
			addActionError(getText("SIN_REGISTRO_EMPLEADOS"));
		}
		if(listDepartamento.size() == 0){
			addActionError(getText("SIN_REGISTRO_DEPARTAMENTOS"));
		}
		return "edit";
	}
	/**
	 * M�todo en el que se actualiza un Usuario
	 * @return {@link String}
	 */
	public String update() {
		empleadoBs.actualizar(model);
		addActionMessage(getText("ACTUALIZACION_EMPLEADO"));
		return index();
	}	

	public String deleteConfirm(){
		return "deleteConfirm";
	}
	
	public String destroy(){
		empleadoBs.eliminar(model);
		addActionMessage(getText("ELIMINACION_EMPLEADO"));
		return index();
	}
	
	
	/**
	 * @return the idSel
	 */
	public Integer getIdSel() {
		return idSel;
	}

	/**
	 * @param idSel the idSel to set
	 */
	public void setIdSel(Integer idSel) {
		this.idSel = idSel;
		if (this.idSel != null) {
			System.out.println("Voy aquí");
			model = empleadoBs.findById(idSel);
			System.out.println(model.getNombre());
		}
	}

	/**
	 * @return the empleadoBs
	 */
	public EmpleadoBs getEmpleadoBs() {
		return empleadoBs;
	}

	/**
	 * @param empleadoBs the empleadoBs to set
	 */
	public void setEmpleadoBs(EmpleadoBs empleadoBs) {
		this.empleadoBs = empleadoBs;
	}

	/**
	 * @return the listaEmpleados
	 */
	public List<Empleado> getListaEmpleados() {
		return listaEmpleados;
	}

	/**
	 * @param listaEmpleados the listaEmpleados to set
	 */
	public void setListaEmpleados(List<Empleado> listaEmpleados) {
		this.listaEmpleados = listaEmpleados;
	}
	
	public Empleado getModel() {
		if(model==null) {
			model = new Empleado();
		}
		return model;
	}

	/**
	 * @param model
	 *            the model to set
	 */
	public void setModel(Empleado model) {
		this.model = model;
	}

	/**
	 * @return the nombre
	 */
	public String getNombre() {
		return nombre;
	}

	/**
	 * @param nombre the nombre to set
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	/**
	 * @return the listPerfil
	 */
	public List<Perfil> getListPerfil() {
		return listPerfil;
	}

	/**
	 * @param listPerfil the listPerfil to set
	 */
	public void setListPerfil(List<Perfil> listPerfil) {
		this.listPerfil = listPerfil;
	}

	/**
	 * @return the listSupervisor
	 */
	public List<Empleado> getListSupervisor() {
		return listSupervisor;
	}

	/**
	 * @param listSupervisor the listSupervisor to set
	 */
	public void setListSupervisor(List<Empleado> listSupervisor) {
		this.listSupervisor = listSupervisor;
	}

	/**
	 * @return the listDepartamento
	 */
	public List<Departamento> getListDepartamento() {
		return listDepartamento;
	}

	/**
	 * @param listDepartamento the listDepartamento to set
	 */
	public void setListDepartamento(List<Departamento> listDepartamento) {
		this.listDepartamento = listDepartamento;
	}

	/**
	 * @return the departamentoBs
	 */
	public DepartamentoBs getDepartamentoBs() {
		return departamentoBs;
	}

	/**
	 * @param departamentoBs the departamentoBs to set
	 */
	public void setDepartamentoBs(DepartamentoBs departamentoBs) {
		this.departamentoBs = departamentoBs;
	}
	
	
}
